#pragma once

/*!
 * \file Node.h
 * \brief Contains definition of Node class and Nodetype enum.
 */

#include <string>

using namespace std;

/*!
 * This enum contains types of Node of tree of regular expression.
 */
enum Nodetype { Operand, Operation };

/*!
 * A class describes node of tree of regular expression.
 */
class Node
{
public:
	/*!
     * A default constructor for Node.
     */
	Node(void);
	
    /*!
     * An extended constructor for Node.
     * \param[in] data Data for Node.
     * \param[in] id ID for Node.
     * \param[in] type Type for Node.
     */
	Node(const string & data, const unsigned int & id, const Nodetype & type);

	/*!
     * A default destructor for Node.
     */
	~Node(void);

	/*!
     * The assignment operator for Node.
     * \param[in] other Another Node object.
	 * \return Node object.
     */
	Node& operator=(const Node& other);

	/*!
     * "Get" method for data.
     * \return Data of Node.
     */
	const string& GetData() const;

    /*!
     * "Get" method for ID.
     * \return ID of Node.
     */
	const unsigned int& GetID() const;

    /*!
     * "Get" method for Nodetype.
     * \return Type of Node.
     */
	const Nodetype& GetNodetype() const;

protected:
	unsigned int ID; /*!< ID of node. */
	Nodetype Type;	 /*!< Type of node. */
	string Data;	 /*!< Data of node. */
};